mybatisplus多数据源连接池(springboot、mybatis 您所在的位置:网站首页 mybatis-plus 关联 mybatisplus多数据源连接池(springboot、mybatis

mybatisplus多数据源连接池(springboot、mybatis

2023-03-23 09:41| 来源: 网络整理| 查看: 265

本文目录springboot、mybatis-plus、Druid多数据源环境搭建SpringBoot整合MyBatisPlus配置动态数据源SpringBoot + Mybatis-Plus多数据源配置整合dynamic-datasourceMyBatis-Plus 多数据源配置记录mybatis-plus多数据源批量操作时,数据源切换失效之谜spring mybatis 多数据源之间怎么切换MybatisPlus 多数据源自动建表、级联查询、自动填充.spring+ mybatis怎么配置自带的数据库连接池Spring Boot(十二):MyBatis-Plus的多数据源和分页MyBatis-Plus被网友推荐好用,它可以解决多表关联的问题吗springboot、mybatis-plus、Druid多数据源环境搭建

Java单体项目里,我们一般是只需配置一个数据库,这时代码里的dao层都是只对一个数据库操作;但有时候我们的数据可能在2个或者3个数据库,这时就需要配置更多数据源,进行数据库直连操作,下面以MySQL的两个库为例(Oracle也就换个驱动类与连接串)。

(本文阅读大概花费两分钟)

技术条件:

springboot 2.5.3 (即springframework 5.3.9)

MySQL 5.7

mybatis-plus 3.5.0

dynamic-datasource 3.5.0

druid 1.2.9

idea开发工具、maven 3.3.9

1、导入相关依赖

2、建立两个数据库mydb(表 user)、db2(表t_class),并分别建一张表

3、编写application.yaml配置文件

4、编写po类、dao层、一个接口测试类

其中,在dao的类加上对应的数据源标识符,使用此注解com.baomidou.dynamic.datasource.annotation.DS

5、启动项目,查看结果

至此,多数据源环境集成成功;当然这里只使用了查询功能,对应事务相关的下一回合文章再做讨论啥。

SpringBoot整合MyBatisPlus配置动态数据源

MybatisPlus特性

快速开始

初始化测试数据表:

父工程依赖

该工程用于依赖管理,pom如下:

创建MyBaitsPlus工程

依赖如下:

properties配置

在这里配置数据库连接,以及数据连接池与mybatisplus的配置等

常规增删改查实现

创建实体类:

该lombok插件省去getset方法。

创建UserMapper接口,并且实现BaseMapper《User》这里我们指定实体类为user可直接使用接口中的方法。

UserMapper.xml,如下:

执行SQL:

在SpringBoot中使用MybatisPlus分页需要注入Bean,并且在启动类上使用@MapperScan(“com.simple.spring.boot.mapper“)扫描mapper文件路径如下:

使用MyBatisPlus可以为我们减少很多很多的代码,不过需要编写实体类,有失必有得。

配置动态数据源

dynamic-datasource-spring-boot-starter 是一个基于springboot的快速集成多数据源的启动器。

优势

网上关于动态数据源的切换的文档有很多,核心只有两种。

如果你的数据源较少,场景不复杂,选择以上任意一种都可以。如果你需要更多特性,请尝试本动态数据源。

劣势

不能使用多数据源事务(同一个数据源下能使用事务),网上其他方案也都不能提供。

如果你需要使用到分布式事务,那么你的架构应该到了微服务化的时候了。

如果呼声强烈,项目达到800 star,作者考虑集成分布式事务。

PS: 如果您只是几个数据库但是有强烈的需求分布式事务,建议还是使用传统方式自己构建多套环境集成atomic这类,网上百度很多。

约定

建议

强烈建议在 主从模式 下遵循普遍的规则,以便他人能更轻易理解你的代码。

主数据库 建议 只执行 INSERT UPDATE DELETE 操作。

从数据库 建议 只执行 SELECT 操作。

快速开始

加入依赖:

注释掉原来的数据库配置,加入:

使用 @DS 切换数据源。

@DS 可以注解在方法上和类上, 同时存在方法注解优先于类上注解 。

注解在service实现或mapper接口方法上,但强烈不建议同时在service和mapper注解。 (可能会有问题)

如果不加入主键则使用默认数据源。

DruidDataSourceAutoConfigure会注入一个DataSourceWrapper,其会在原生的spring.datasource下找url,username,password等。而我们动态数据源的配置路径是变化的,所以需要排除:

或者在类上排除:

然后更换properties配置信息:

本篇代码案例地址:

https://github.com/450255266/open-doubi

作者:SimpleWu

出处:https://www.cnblogs.com/SimpleWu/p/10930388.html

SpringBoot + Mybatis-Plus多数据源配置整合dynamic-datasource

这里要排除DruidDataSourceAutoConfigure ,因为DruidDataSourceAutoConfigure会注入一个DataSourceWrapper,其会在原生的spring.datasource下找url,username,password等。而我们动态数据源的配置路径是变化的。

@DS优先级:方法 》 类 @DS 可以注解在方法上和类上,同时存在方法注解优先于类上注解,mapper或者service都可以添加,建议只在一个方法上添加即可。

MyBatis-Plus 多数据源配置

一,引言

在我们实际业务开发中,有时需要同时涉及多个数据库, 可能一个 API 中所需要的数据,往往是包含了多个数据库中的数据,这个时候我们就需要在项目运行中,切换数据源。

二,具体实现

步骤一:我们先需要引入maven配置,版本可自选。dynamic-datasource-spring-boot-starter 是一个基于springboot的快速集成多数据源的启动器。

步骤二:多数据源配置,需要注意的后面都有写注释。

步骤三:步骤三就可以直接使用啦,真的是太方便了, @DS 可以注解在方法上或类上, 同时存在就近原则 方法上注解 优先于 类上注解 。

官方建议:

1,本框架只做 切换数据源 这件核心的事情,并不限制你的具体操作,切换了数据源可以做任何CRUD。

2,配置文件所有以下划线 _ 分割的数据源 首部 即为组的名称,相同组名称的数据源会放在一个组下。

3,切换数据源可以是组名,也可以是具体数据源名称。组名则切换时采用负载均衡算法切换。

4,默认的数据源名称为 master ,你可以通过 spring.datasource.dynamic.primary 修改。

方法上的注解优先于类上注解。

5,强烈建议只在service的类和方法上添加注解,不建议在mapper上添加注解。

记录mybatis-plus多数据源批量操作时,数据源切换失效之谜

首先在同一方法中执行两个不同数据源的dml语句,然后发现本应该插入clickhouse的数据跑到的mysql中 @DS定义在Mapper层,然后我尝试把saveBatch换成save单条插入,又可以了。于是发现原因了, 批量操作并没有获取Mapper层。

解决方案: 将@DS定义到Service层生效

spring mybatis 多数据源之间怎么切换

《!-- 注解式事务管理 --《tx:annotation-driven transaction-manager=“transactionManager“ /《!-- 自动扫描 mybatis mapper接口 --《bean class=“org.mybatis.spring.mapper.MapperScannerConfigurer“《property name=“basePackage“ value=“com.test.tt.mapper“ /《property name=“sqlSessionFactory“ ref=“sqlSessionFactory“《/property《/bean《!-- 数据源2--《!-- proxool连接池 --《bean id=“dataSource_d2“ class=“org.logicalcobwebs.proxool.ProxoolDataSource“《property name=“alias“ value=“${d2.alias}“ /《property name=“driver“ value=“${driver}“ /《property name=“driverUrl“ value=“${d2.driverUrl}“ /《property name=“user“ value=“${d2.user}“ /《property name=“password“ value=“${d2.password}“ /《property name=“houseKeepingTestSql“ value=“${house-keeping-test-sql}“ /《property name=“maximumConnectionCount“ value=“${maximum-connection-count}“ /《property name=“minimumConnectionCount“ value=“${minimum-connection-count}“ /《property name=“prototypeCount“ value=“${prototype-count}“ /《property name=“simultaneousBuildThrottle“ value=“${simultaneous-build-throttle}“ /《property name=“trace“ value=“${trace}“ /《/bean《bean id=“sqlSessionFactory_d2“ class=“org.mybatis.spring.SqlSessionFactoryBean“《property name=“dataSource“ ref=“dataSource_d2“ /《property name=“configLocation“ value=“classpath:mybatis-d2-config.xml“《/property《/bean《bean id=“transactionManager_d2“class=“org.springframework.jdbc.datasource.DataSourceTransactionManager“《property name=“dataSource“ ref=“dataSource_d2“ /《/bean《!-- 注解式事务管理 --

MybatisPlus 多数据源自动建表、级联查询、自动填充.

详细设计及源码请移步码云搜索 mybatis-plus-ext

==提示==: 假如存在此种场景: User 、 Role 、 Menu 三个实体,他们之间的关系是: User 多对多 Role 、 Role 多对多 Menu ,当我查询出User的集合后,如何获取Role和Menu的数据呢?

描述:

字段:

扩展注解:

描述:

字段:

扩展注解:

描述:

字段:

描述:

字段:

描述:

字段:

描述:

字段:

描述:

字段:

描述:

字段:

描述:

字段:

描述:

字段:

描述:

字段:

描述:

字段:

描述:

字段:

spring+ mybatis怎么配置自带的数据库连接池

造一个db.properties如下配置jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNulljdbc.username=rootjdbc.password=root在spring配置中读取配置数据源,使用dbcp连接池用spring管理线程池,mybits的各种映射也用spring读取管理就好

Spring Boot(十二):MyBatis-Plus的多数据源和分页

同一个项目有时会涉及到多个数据库,这时我们就要配置多个数据源。配置多数据源的常见情况有以下两种:

1)同一个项目中涉及两个或多个业务数据库,它们之间相互独立,这种情况也可以作为两个或多个项目来开发

2)两个或多个数据库之间是主从关系,主库负责写,从库负责读

1、pom.xml配置

在pom.xml中增加MyBatis-Plus多数据源依赖:

2、配置文件配置

在配置文件application.yml中配置我们需要连接的数据库:blog和user,默认为blog

3、启动类配置

在@SpringBootApplication注解上增加exclude = DruidDataSourceAutoConfigure.class配置:

这个配置的作用是去掉对DruidDataSourceAutoConfigure的自动配置,否则程序会报错:

原因:

DruidDataSourceAutoConfigure在DynamicDataSourceAutoConfiguration之前,其会注入一个DataSourceWrapper,会在原生的spring.datasource下找url, username, password等,而我们动态数据源的配置路径是变化的。

4、实体类和dao层配置

在po文件夹下创建blog和user文件夹,分别用于存储blog数据库和user数据库的实体:

注解:

@TableName: 表名注解,标识实体类对应的表

@TableId: 主键注解,当type = IdType.AUTO时,表示这个主键是自增主键

在dao文件夹下创建blog和user文件夹,分别用于存储blog和user的dao:

注解:

@Repository: 将数据访问层(DAO层)的类标识为Spring Bean

@DS: 配置非默认数据源,本示例中blog为默认数据源,user为非默认数据源,在使用@DS注解时,有如下注意事项:

1)不能使用事务,否则数据源不会切换,使用的还是第一次加载的数据源

2)第一次加载数据源之后,第二次,第三次……操作其他数据源,如果数据源不存在,使用的还是第一次加载的数据源

3)数据源名称不要包含下划线,否则不能切换

5、测试验证

编写ArticleController和UserInfoController:

注 : 业务逻辑复杂时,Controller和Mapper中间会有Service层来处理业务逻辑,现在我们就简单的测试一下多数据源,所以直接使用Controller调用Mapper了

1、配置分页插件

2、分页方法

1)使用MyBatis-Plus的selectPage方法

使用MyBatis-Plus的selectPage方法,返回了IPage,示例:

2)sql分页

有时候有些分页需要关联多张表,使用LambdaQueryWrapper不太方便,这时候可以自己写sql来实现分页,主要有两种:纯sql自己实现分页和使用IPage实现分页

注 : 这里的sql示例就使用单表查询了,具体的可根据业务场景使用多表查询

A、纯sql自己实现分页

分页的数据list和总条数单独调用方法返回 :

B、使用IPage实现分页(常用)

返回IPage,返回值的数据结构见“ 1)使用MyBatis-Plus的selectPage方法 ”

本文简单介绍了一下MyBatis-Plus的多数据源和分页,本文示例代码, 详见https://gitee.com/tunan222/spring-boot-demo

若您觉得还可以,请帮忙点个 “赞” ,谢谢

MyBatis-Plus被网友推荐好用,它可以解决多表关联的问题吗

MyBatis-Plus之所以被网友称赞,不仅仅是因为他为了简化而生,为了提高效率而开发,而是因为他可以解决多表关联的问题。

一:为简化开发而生的mybatis-plus

MyBatis-Plus的基础MyBatis ,他说是从mybatis进化而来的,在 MyBatis 的基础上增强性能,但是不改变根本,为简化开发、提高效率而生的mybatis-puls,由于它的只加强不改变,让它拥有了无侵入性能,这个特性可以让它在介入工程时,不会有卡顿现象,它还有强大的 CRUD 操作,可以满足用户各类需求,它还有性能分析拦截器,如果超过指定时间机会停止运行,可以及时发现问题解决问题。

二:mybatis-puls实现实体类操作多表

mybatis-puls可以通过业务创建多个表,并且将这些表结合起来,建立实体关系方式,实现一对多实体查询,方便承载账户信息,它的SQL可以使代码拥有极好的可维护性,可以利用数据库的缓存,提高性能。

三:mybatis-puls 方便数据分析管理

mybatis-puls可以快速集成多数据源,可以最简洁的完成数据库操作分析,引入 lombok 依赖,进而简化代码,减少使用 gette方法,不需要编写xml文件,简单方便快捷,MyBatis-Plus 的代码生成器是AutoGenerator,它可以最大程度提高开发效率,布局全局信息,配置数据源信息,最大程度简化代码数据,只做切换数据源,不限制用户具体操作。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有